Introdução - Lab4 - Codificação de Imagem com DWT

Neste laboratório, foram utilizadas as bibliotecas OpenCV2, Pywt e MatplotLib, dentro do ambiente de desenvolvimento do Google Colab, para desenvolvimento de atividades relativas à codificações de imagens com a Transformada DWT (Discrete Wavelet Transform), utilizando a linguagem Python.

Dentre as atividades de codificação desenvolvidas, foi possível atingir os seguintes objetivos:

  1. Efetuar a Codificação de Imagem e a Decodificação por DWT e IDWT
  2. Testar funções de Codificação Multinível
  3. Verificar a taxa de compressão só com a Componente de Aproximação

Link para o ambiente Colab utilizado no desenvolvimento desta prática:

Abaixo, temos a importação das bibliotecas utilizadas ao longo do código utilizado nesta prática:

1. Codificação de Luminância (P&B) com DWT

Nesta primeira tarefa, foi realizada uma codificação DWT, com as imagens dos três integrantes do grupo, através da função Codificacao_DWT_PB() que recebe como parâmetro o caminho para cada uma das imagens.

A função funciona da seguinte forma:

  1. Lê a imagem indicada no parâmetro e converte o esquema de cores de RGB para escala de tons de cinza
  2. Partindo dos canais de tons de cinza, é a aplicada a codificação DWT através da função pywt.dwt2, bem como sua inversa, por meio da função pywt.idwt2
  3. Plota os Canais gerados pela aproximação de DWT (CA,CH,CV e CD)
  4. Calcula o MSE (Erro quadrático médio) da imagem aproximada, em relação à imagem original, através da fórmula: $ MSE = \frac{1}{LA}{\sum_{i=0}^L}{\sum_{j=0}^A [O(i,j) - R(i,j)]^2}$
  5. Calcula a Relação Sinal Ruído de Pico (PSNR), através da fórmula: $ PSNR = 10.log_{10} \left( \frac{{MAX_I}^2}{MSE} \right) $
  6. Plota a imagem original em escala de tons de cinza e a imagem reconstruída, também em grayscale.

O código utilizado e o resultado obtido, podem ser vistos abaixo:

Abaixo, temos os resultados obtidos por cada um dos integrantes do Grupo:

Integrante 1

Integrante 2

Integrante 3

Observações

Podemos notar que as imagens reconstruídas dos três integrantes apresentam perda de qualidade pouco perceptível à olho nu, sendo capazes de serem percebidas igualmente, pela visão humana.

Contudo, analisando os erros, vemos que a imagem reconstruída do Integrante 2 (Victor), apresentou maior Relação sinal Ruído, com $PSNR = 288.31dB$.

A imagem do Integrante 1 (Gabriel), apresentou o menor PSNR ($PSNR=284dB$) dentre as três imagens, contudo apresentou o maior Erro quarático, da ordem de $2.12\cdot10^{-24}$.

2. Teste das Funções de Multiresolução

Nesta parte, foram testadas as funções de DWT multiresolução, como a função pywt.wavedec2().

Basicamente, equanto a função utilizada na parte anterior pywt.dwt2(), aplica a DWT na imagem e fornece diretamente as matrizes dos coeficientes de aproximação e detalhe, em um único nível.

A função pywt.wavedec2(), fornece apenas o vetor de decomposição, que contém o número de coeficientes por nível, sendo possível obter múltiplas matrizes com os coeficientes de aproximação e de detalhe a partir do vetor de decomposição.

Nesta aplicação, através da função DWT_Multinivel_PB(), obtivemos uma aproximação para as imagens dos integrantes do grupo em tons de cinza, por meio de dois níveis diferentes, sendo que a partir do nível 2, obtemos os coefientes de aproximação e detalhe, enquanto o nível 1 é utilizado apenas para se obter os coeficientes de detalhe.

O código utilizado e o resultado obtido, podem ser vistos abaixo:

Abaixo, temos os resultados obtidos por cada um dos integrantes do Grupo:

Integrante 1

Integrante 2

Integrante 3

Observações

Podemos notar que o resultado da imagem reconstruída obtida através dos coeficientes presentes nos múltiplos níveis da função pywt.wavedec2(), traz um resultado visualmente muito próximo, nos três casos observados, relativamente ao resultado obtido pela função dwt2(), utilizada no item anterior.

3. Reconstrução de Imagem Colorida (RGB)

Nesta terceira tarefa, foi realizada uma codificação DWT colorida, incluindo os três canais de cores da escala RGB, com as imagens dos três integrantes do grupo, através da função Codificacao_DWT_RGB().

A função funciona da seguinte forma:

  1. Obter os coeficientes da transformada da imagem: Aproximação, Horizontal, Vertical e Diagonal
  2. Calcular os coeficientes da inversa da transformada da imagem
  3. Separar os coeficientes por cada plano de cor: Vermelho, Verde e Azul
  4. Para reconstruir a imagem no nivel 1, utiliza-se o coeficente de aproximação encontrado para cada plano de cor.
  5. Para salvarmos as imagens no drive foi necessário converter o coeficente de aproximação nível 1 e 2 para inteiro
  6. Para obter a imagem reconstruida final, transformamos de RGB para BGR e substituimos os coeficientes da inversa encontrados no item 2, assim obtemos a imagem reconstruida
  7. Aplicando as formulas descritas no colab de exemplo, obtemos MSE e PSNR, a partir das variaveis: diferença entre a img real e a inversa da imagem, Altura, Largura e o valor max que uma cor pode assumir dentro de 8 bits(255)

O código utilizado e o resultado obtido, podem ser vistos abaixo:

Integrante 1

Integrante 2

Integrante 3

Observações

Abaixo, temos a tabela comparativa, com o tamanho das imagens originais, o tamanho das imagens codificadas com a DWT, a relação sinal ruído de pico (PSNR), erro quadrático Médio (MSE) e a taxa de compressão alcançada com a codificação.

Analisando os dados, podemos ver que a PSNR é aproximadamente igual para as três imagens (entorno de 280dB) e que a imagem com a maior taxa de compressão foi a do Integrante 2, chegando a -60% do tamanho da imagem original, contudo, foi a imagem que também apresentou a maior relação PSNR (283.23dB).

4. Reconstrução de Imagem Colorida (YCrCb)

Nesta quarta tarefa, foi utilizada a mesma função do item 3. com uma ligeira adaptação para substituir os canais de cores da escala RGB para a escala YCrCb.

Sendo assim, a estrutura da função foi preservada, bem como sua metodologia, sofrendo apenas pequenas adaptações para construção da função Codificacao_DWT_YCrCb().

O código utilizado e o resultado obtido, podem ser vistos abaixo:

5. Tabela Comparativa de Compressão

Abaixo, temos a tabela comparativa, com o tamanho das imagens originais, o tamanho das imagens codificadas com a DWT, a relação sinal ruído de pico (PSNR), erro quadrático Médio (MSE) e a taxa de compressão alcançada com a codificação.

Nesta Tabela, temos o comparativo com os dados das imagens dos três integrantes separados, codificada através da DWT com escala RGB, bem como a imagem de montagem com os três integrantes do grupo, codificada através da DWT com escala YCrCb.

Analisando os dados, podemos observar que a imagem de montagem com os três integrantes do grupo, sofre a maior compressão, chegando à -78.32% do tamanho da imagem original.

Esta diferença pode ser explicada por ser a única imagem dentre as 4, codificada com DWT em escala de cores YCrCb, equanto as demais foram codificadas em RGB.

Conclusão

Visando dar sequência ao estudo de codificação de imagens, neste laboratório foi possível aplicar a técnica de compressão da transformada de wavelet, uma variante da codificação de transformada discreta de cosseno (DCT) que usa wavelets em vez do algoritmo baseado em bloco do DCT.

Para aplicar o método, foi necessário explorar algumas técnicas de pré-processamento nas imagens, tendo em vista a conversão e adaptação do esquema de cores dos canais RGB para outras escalas e aplicação da transformada nos layers padronizados.

Assim como na transformada discreta de cosseno, como parte do experimento, foi possível analisar a qualidade das imagens reconstruídas qualitativa e quantitativamente, através da Relação sinal Ruído e da Relação Sinal Ruído de Pico, o que demonstrou uma grande competência por parte dos algoritmos em trabalhar com a manipulação da distribuição dos dados durante as transformações sem que houvessem perdas significativas.

Desse modo, bem como fora discorrido, foi possível denotar a capacidade de preservação das estruturas funcionais, bem como metodológicas do processo de codificação através da DWT, sofrendo apenas pequenas adaptações para construção da função e êxito em realizar a compressão das imagens, com resultados de maior compressão equivalentes à -78.32% do original quando utilizada a compressão em escala de cores YCrCb.

AudioDescrição